/**
 * 
 */
package array.passed;

/**
 * @author xyyi
 *
 */
public class SearchA2DMatrix {

	/**
	Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:

	Integers in each row are sorted from left to right.
	The first integer of each row is greater than the last integer of the previous row.

	For example,

	Consider the following matrix:

	[
	[1,   3,  5,  7],
	[10, 11, 16, 20],
	[23, 30, 34, 50]
	]

	Given target = 3, return true.
	 */
	public boolean searchMatrix(int[][] matrix, int target) {
		// Start typing your Java solution below
		// DO NOT write main() function
		if (matrix == null || matrix.length == 0)
			return false;
		int rows = matrix[0].length;
		int begin = 0, end = matrix.length * matrix[0].length - 1;
		while (begin <= end) {
			int mid = begin + (end - begin) / 2;
			int row = mid / rows, col = mid % rows;
			if (matrix[row][col] == target) {
				return true;
			}
			if (matrix[row][col] < target) {
				begin = mid + 1;
			} else {
				end = mid - 1;
			}
		}

		return false;
	}

	/**
	 * 
	 */
	public SearchA2DMatrix() {
		// TODO Auto-generated constructor stub
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
